package com.qf.controller;


import com.qf.pojo.User;
import com.qf.pojo.UserVo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
@RequestMapping("/param")
public class ParamController {

    /**
     * 演示springMvc默认支持的接受参数类型：
     *      默认支持的参数就是可以加在方法参数上的，也可以不加，可以按照自己的需要添加删除
     *      HttpServletRequest、HttpSession、HttpServletResource，Model
     * @return
     */
    @RequestMapping("/test1")
    public String test1(HttpServletRequest request , HttpServletResponse response , Model model){
        String id = request.getParameter("id");
        String name = request.getParameter("name");

        System.out.println("=====id====="+id);
        System.out.println("=====name====="+name);
        //将数据放入到请求域中带到页面中展示使用
        model.addAttribute("id", id);
        model.addAttribute("name", name);
        //指定返回数据并跳转到指定页面
        return "hello";
    }

    /**
     * 测试浏览器端发送过来的基本参数类型
     * 基本参数类型：Integer 、float、double、long、string等类型的参数
     * @param model
     * @return
     */
    @RequestMapping("/test2")
    public String test2(Integer id , String name ,Model model){

        System.out.println("=====id====="+id);
        System.out.println("=====name====="+name);
        //将数据放入到请求域中带到页面中展示使用
        model.addAttribute("id", id);
        model.addAttribute("name", name);
        //指定返回数据并跳转到指定页面
        return "hello";
    }

    /**
     * 接受pojo实体类类型的数据
     *使用：当浏览器传入的参数过多时，可以将参数封装称实体类进行接收
     * @param model
     * @return
     */
    @RequestMapping("/test3")
    public String test3(User user, Model model){
        System.out.println("=====user====="+user);
        //将数据放入到请求域中带到页面中展示使用
        model.addAttribute("user", user);
        //指定返回数据并跳转到指定页面
        return "hello";
    }

    /**
     * 接收数组类型的参数
     *      一般页面中如果表单使用post方式提交，那么chekbox复选框提交的内容一般都是数组类型
     *      要求name属性名称必须等于接收的变量名
     * @param hobby
     * @param model
     * @return
     */
    @RequestMapping("/test4")
    public String test4(String[] hobby, Model model){
        System.out.println("=====hobby====="+hobby);
        //将数据放入到请求域中带到页面中展示使用
        model.addAttribute("hobby", hobby);
        //指定返回数据并跳转到指定页面
        return "hello";
    }

    /**
     * 演示接收List类型参数，一般行编辑需要求的时候使用
     * @return
     */
    @RequestMapping("/test5")
    public String test5(UserVo vo , Model model){
        System.out.println("=====userList====="+vo);
        //指定返回数据并跳转到指定页面
        return "hello";
    }

    /**
     * 测试resfulf(斜杠传参)风格参数
     *
     * @param id
     * @param name
     * @param model
     * @return
     */
    @RequestMapping("/test6/{id}/{name}")
    public String test6(@PathVariable("id") Integer id,
                        @PathVariable("name") String name,
                        Model model){
        System.out.println("=====userList====="+id+name);


        //指定返回数据并跳转到指定页面
        return "hello";
    }

    /**
     * 演示请求转发
     * @param id
     * @param name
     * @param model
     * @return
     */
    @RequestMapping("/test7")
    public String test7(Integer id,
                        String name,
                        Model model){
        System.out.println("=====userList====="+id+name);

        model.addAttribute("id", id);
        model.addAttribute("name", name);
        //指定返回数据并跳转到指定页面
        return "forward:/param/test3";
    }

    /**
     * 演示重定向
     * @param id
     * @param name
     * @param model
     * @return
     */
    @RequestMapping("/test8")
    public String test8(Integer id,
                        String name,
                        Model model){
        System.out.println("=====userList====="+id+name);

        model.addAttribute("id", id);
        model.addAttribute("name", name);
        //指定返回数据并跳转到指定页面
        return "redirect:https://www.baidu.com";

    }
}
